package DAO;

import factory.Conexao;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.EstadoIntegracao;
import model.Integracao;
import model.IntegracaoHistorico;

public class IntegracaoHistoricoDAO implements Serializable {
    
    private IntegracaoHistoricoDAO()
    {
        
    }
    
    public static boolean insert(IntegracaoHistorico integracaoHistorico) {
        String sql;
        sql  = "INSERT INTO INTEGRACAOHISTORICO (SEQUENCIAINTEGRACAO,";
        sql += "                                 SEQUENCIAHISTORICO,";
        sql += "                                 ERROINTEGRACAO,";
        sql += "                                 DATAPROCESSAMENTO,";
        sql += "                                 DETALHEHISTORICO,";
        sql += "                                 ERROORACLECODE,";
        sql += "                                 ERROORACLEMSG,";
        sql += "                                 USUARIO,";
        sql += "                                 DATAATUALIZACAO,";
        sql += "                                 ESTADOINTEGRACAO,";
        sql += "                                 JUSTIFICATIVA,";
        sql += "                                 ESTADOANTERIOR)";
        sql += "                         VALUES (?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?,";
        sql += "                                 ?)";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracaoHistorico.getIntegracao().getSequenciaIntegracao());
            stm.setInt(2, integracaoHistorico.getSequenciaHistorico());
            stm.setInt(3, integracaoHistorico.getErroIntegracao());
            stm.setDate(4, integracaoHistorico.getDataProcessamento());
            stm.setString(5, integracaoHistorico.getDetalheHistorico());
            stm.setInt(6, integracaoHistorico.getErroOracleCode());
            stm.setString(7, integracaoHistorico.getErroOracleMsg());
            stm.setString(8, integracaoHistorico.getUsuario());
            stm.setDate(9, integracaoHistorico.getDataAtualizacao());
            stm.setInt(10, integracaoHistorico.getEstadoIntegracao().getEstadoIntegracao());
            stm.setString(11, integracaoHistorico.getJustificativa());
            stm.setInt(12, integracaoHistorico.getEstadoAnterior().getEstadoIntegracao());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean update(IntegracaoHistorico integracaoHistorico) {
        String sql;
        sql  = "UPDATE INTEGRACAOHISTORICO";
        sql += "   SET ERROINTEGRACAO = ?, ";
        sql += "       DATAPROCESSAMENTO = ?,";
        sql += "       DETALHEHISTORICO = ?,";
        sql += "       ERROORACLECODE = ?,";
        sql += "       ERROORACLEMSG = ?,";
        sql += "       USUARIO = ?,";
        sql += "       DATAATUALIZACAO = ?,";
        sql += "       ESTADOINTEGRACAO = ?,";
        sql += "       JUSTIFICATIVA = ?,";
        sql += "       ESTADOANTERIOR = ?";
        sql += " WHERE SEQUENCIAINTEGRACAO = ?";
        sql += "   AND SEQUENCIAHISTORICO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracaoHistorico.getErroIntegracao());
            stm.setDate(2, integracaoHistorico.getDataProcessamento());
            stm.setString(3, integracaoHistorico.getDetalheHistorico());
            stm.setInt(4, integracaoHistorico.getErroOracleCode());
            stm.setString(5, integracaoHistorico.getErroOracleMsg());
            stm.setString(6, integracaoHistorico.getUsuario());
            stm.setDate(7, integracaoHistorico.getDataAtualizacao());
            stm.setInt(8, integracaoHistorico.getEstadoIntegracao().getEstadoIntegracao());
            stm.setString(9, integracaoHistorico.getJustificativa());
            stm.setInt(10, integracaoHistorico.getEstadoAnterior().getEstadoIntegracao());
            stm.setInt(11, integracaoHistorico.getIntegracao().getSequenciaIntegracao());
            stm.setInt(12, integracaoHistorico.getSequenciaHistorico());

            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static boolean delete(IntegracaoHistorico integracaoHistorico) {
        String sql;
        sql  = "DELETE";
        sql += "  FROM INTEGRACAOHISTORICO";
        sql += " WHERE SEQUENCIAINTEGRACAO = ?";
        sql += "   AND SEQUENCIAHISTORICO = ?";

        Connection conn;
        PreparedStatement stm;
        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracaoHistorico.getIntegracao().getSequenciaIntegracao());
            stm.setInt(2, integracaoHistorico.getSequenciaHistorico());
            stm.execute();
            stm.close();
            conn.close();
            return true;
        } catch (SQLException ex) {
            return false;
        }
    }

    public static ArrayList<IntegracaoHistorico> selectByIntegracao(Integracao integracao) {
        String sql;
        sql  = "SELECT HIS.SEQUENCIAINTEGRACAO,";
        sql += "       HIS.SEQUENCIAHISTORICO,";
        sql += "       HIS.ERROINTEGRACAO,";
        sql += "       HIS.DATAPROCESSAMENTO,";
        sql += "       HIS.DETALHEHISTORICO,";
        sql += "       HIS.ERROORACLECODE,";
        sql += "       HIS.ERROORACLEMSG,";
        sql += "       HIS.USUARIO,";
        sql += "       HIS.DATAATUALIZACAO,";
        sql += "       HIS.ESTADOINTEGRACAO,";
        sql += "       HIS.JUSTIFICATIVA,";
        sql += "       HIS.ESTADOANTERIOR";
        sql += "  FROM INTEGRACAOHISTORICO HIS";
        sql += " WHERE HIS.SEQUENCIAINTEGRACAO = ?";

        Connection conn;
        PreparedStatement stm;
        ResultSet rs;
        EstadoIntegracao estadoIntegracao;
        IntegracaoHistorico integracaoHistorico;
        ArrayList<IntegracaoHistorico> listIntegracaoHistorico = new ArrayList<IntegracaoHistorico>();

        try {
            conn = Conexao.getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, integracao.getSequenciaIntegracao());
            rs = stm.executeQuery();
            while (rs.next()) {
                integracaoHistorico = new IntegracaoHistorico();
                integracaoHistorico.setIntegracao(integracao);
                
                estadoIntegracao = new EstadoIntegracao();
                estadoIntegracao.setEstadoIntegracao(rs.getInt("ESTADOINTEGRACAO"));
                integracaoHistorico.setEstadoIntegracao(estadoIntegracao);
                
                estadoIntegracao = new EstadoIntegracao();
                estadoIntegracao.setEstadoIntegracao(rs.getInt("ESTADOANTERIOR"));
                integracaoHistorico.setEstadoAnterior(estadoIntegracao);
                
                integracaoHistorico.setSequenciaHistorico(rs.getInt("SEQUENCIAHISTORICO"));
                integracaoHistorico.setErroIntegracao(rs.getInt("ERROINTEGRACAO"));
                integracaoHistorico.setDataProcessamento(rs.getDate("DATAPROCESSAMENTO"));
                integracaoHistorico.setDetalheHistorico(rs.getString("DETALHEHISTORICO"));
                integracaoHistorico.setErroOracleCode(rs.getInt("ERROORACLECODE"));
                integracaoHistorico.setErroOracleMsg(rs.getString("ERROORACLEMSG"));
                integracaoHistorico.setUsuario(rs.getString("USUARIO"));
                integracaoHistorico.setDataAtualizacao(rs.getDate("DATAATUALIZACAO"));
                integracaoHistorico.setJustificativa(rs.getString("JUSTIFICATIVA"));
                
                listIntegracaoHistorico.add(integracaoHistorico);
            }
            stm.close();
            conn.close();
            return listIntegracaoHistorico;
        } catch (SQLException ex) {
            return null;
        }
    }
}
